ECS完全理解
概要
これ
「Unity ECS完全に理解した」
https://connpass.com/event/101774/
ドカベンさん
前提
Worldインスタンスに対してComponetSystemが1:1対応
DefaultWorld というのがデフォである。
動作
Transform、Render、EnemyGenerate、、みたいにSystemを作り、
それぞれに前提というか適応ルールをセットする。
e,g, Pos,Rotate,Scaleのどれかがあれば -> PlayerやEnemyのエンティティにヒットする。
用語の整理
ComponentData
Entity
システムに対するインデックスの定義。
var arch = entityManager.CreateArchetype(条件要素)
var entity = arch.なにやら
ECSの描画について
サンプルあり。
衝突判定
そのうち公式実装されるかも。
のたぐす
ECSでパーティクル実装するメソッド
・GOよりオーバーヘッド低い
・C#でコントロールできる
Entityを作る -> それを扱うSystemを作る -> 動かす
random.NextFloat3Direction
そんなのあるんだww
一定時間経過したら削除
ウッッッ見失った、、、
軌跡
一定個数の通った位置を保持
要素をBufferArrayで定義、生成。
RemoveAt[index]などで削除を行う。
描画
Graphics.DrawMesh
MarkDynamicでちょっと早くなる?
高速化
GPUへ送る情報を減らすと高速化できそう -> 減らす。
DrawMeshInstancedIndirect でバッチで渡す。
頂点数分の長さのパイプ(20パーツ)を作って、Trailにする。
Segment + 要素に分割
一旦データをNativeArrayに入れる -> ComputeBufferに入れる流れ。
NativeArray、Tempで毎回取得するより必要になったタイミングで獲得する流れのほうがよい -> エディタでやるとTempのほうが遅いらしい。
Es
Hybrid ECS
既存のプロダクトを手っ取り早く良くしたい
メインスレッドの占有時間を7 -> 0.4まで減らす話
Transformを扱う上では結構あり(素敵)
1つのGOから1Entityを生成
従来の開発スタイル + ECS
Hybrid特有
GOからEntityの値を書き換える、EntityからGOのコンポーネントを書き戻す
GameObjectEntityを使う。
ComponentDataWrapper を継承することで、GOに貼れる。
CopyTransformToGOSysytem というSystemが標準で提供されている。
LT
NativeSetThreadIndex アトリビュート
ほーーこんなのが。